from datetime import datetime
import sqlalchemy as sa 
from sqlalchemy.orm import Mapped,mapped_column
from sqlalchemy import Date
from APP.common.model import Base,id_key,SoftDeleteMixin
from APP.utils.timezone import timezone

class UserInfo(Base):
    __tablename__ = 'user_info'

    #init=False参数表示这个字段不会被包含在自动生成的__init__构造函数中，id字段通常由数据库自动生成（如自增主键），所以不需要在对象创建时指定
    user_id:Mapped[id_key] = mapped_column(init=False,comment='用户唯一标识，用于系统内唯一标识一个用户')
    user_name: Mapped[str] = mapped_column(sa.String(50), nullable=False, comment='用户姓名，记录用户的真实姓名')
    age: Mapped[int | None] = mapped_column(sa.Integer(), comment='用户年龄，记录用户的实际年龄')
    gender: Mapped[str | None] = mapped_column(sa.Enum('男', '女', '其他'), comment='用户性别，记录用户的性别信息')
    department: Mapped[str | None] = mapped_column(sa.String(50), comment='用户所属部门，记录用户所在的部门名称')
    position: Mapped[str | None] = mapped_column(sa.String(50), comment='用户职位，记录用户的职位信息')
    employee_id: Mapped[str | None] = mapped_column(sa.String(20), comment='工号，企业为员工分配的唯一编号')
    email: Mapped[str | None] = mapped_column(sa.String(50), comment='邮箱，用户的联系邮箱')
    phone: Mapped[str | None] = mapped_column(sa.String(20), comment='手机号，用户的联系电话')
    location:Mapped[str | None] = mapped_column(sa.String(50), comment='籍贯')
    entry_date: Mapped[Date | None] = mapped_column(sa.Date(), comment='入职日期，用户加入企业的日期')
    education: Mapped[str | None] = mapped_column(sa.Enum('高中及以下', '大专', '本科', '硕士', '博士', '其他'), comment='学历，用户的最高学历')
    major: Mapped[str | None] = mapped_column(sa.String(50), comment='专业，用户所学的专业')
    birthday: Mapped[Date | None] = mapped_column(sa.Date(), comment='出生日期，记录用户的出生年月日')
    id_card: Mapped[str | None] = mapped_column(sa.String(18), comment='身份证号，用户的身份标识号码')
    address: Mapped[str | None] = mapped_column(sa.String(200), comment='家庭住址，用户的居住地址')
    political_status: Mapped[str | None] = mapped_column(sa.Enum('中共党员', '中共预备党员', '共青团员', '民主党派', '群众'), comment='政治面貌')
    nationality: Mapped[str | None] = mapped_column(sa.String(50), comment='民族，用户所属的民族')
    avatar_url: Mapped[str | None] = mapped_column(sa.String(200), comment='头像地址，用户头像的存储路径')
    create_time: Mapped[datetime] = mapped_column(sa.DateTime(timezone=True), init=False,default_factory=timezone.now, comment='创建时间，记录用户信息创建的时间')
    update_time: Mapped[datetime] = mapped_column(sa.DateTime(timezone=True), init=False,default_factory=timezone.now, onupdate=timezone.now, comment='更新时间，记录用户信息最后更新的时间')
